#ifndef ASSTREAMITERATOR_H
#define ASSTREAMITERATOR_H

#include <iostream>
#include <wx/string.h>
#include <M_Code_editor.h>
#include <astyle.h>

class ASStreamIterator : public astyle::ASSourceIterator {
  public:
    ASStreamIterator( M_Code_Editor* cbe, const wxChar* in );
    virtual ~ASStreamIterator();
    bool hasMoreLines() const;
    int  getStreamLength() const;
    std::string nextLine( bool emptyLineWasDeleted = false );
    std::string peekNextLine();
    void peekReset();
    std::streamoff tellg();
    bool FoundBookmark() const   { return m_FoundBookmark;    }
    void ClearFoundBookmark()    { m_FoundBookmark = false;   }
    bool FoundBreakpoint() const { return m_FoundBreakpoint;  }
    void ClearFoundBreakpoint()  { m_FoundBreakpoint = false; }
  protected:
    inline bool IsEOL( wxChar ch ) { return ( ch == _T( '\r' ) || ch == _T( '\n' ) ); }
    M_Code_Editor* m_Ed;
    const wxChar* m_CharPtr;
    const wxChar* m_SavedCharPtr;
    int m_CurChar;
    int m_CurLine;
    bool m_FoundBookmark;
    bool m_FoundBreakpoint;
  private:
    std::string readLine();
};

#endif
